20μ₯ strict mode
strict modeλ?
Strict Mode(μ격 λͺ¨λ)λ JavaScriptμμ λ μ격ν λ¬Έλ²κ³Ό μ€ν κ·μΉμ μ μ©νλ κΈ°λ₯μ΄λ€. μ€μλ λ²κ·Έλ₯Ό λ°©μ§νκ³ , μμ νκ³ ν¨μ¨μ μΈ μ½λλ₯Ό μμ±νλλ‘ λμμ€λ€.
- μ€μ λ°©μ§: λ³μ μ μΈ μμ΄ μ¬μ©νκ±°λ μλͺ»λ μ½λλ₯Ό μμ±νλ©΄ μλ¬λ₯Ό λ°μμν΄.
- 보μ κ°ν: this κ°μ΄ μλμΉ μκ² μ μ κ°μ²΄λ₯Ό μ°Έμ‘°νμ§ μλλ‘ λ°©μ§.
- with λ¬Έ μ¬μ© κΈμ§: κ°λ μ±κ³Ό λλ²κΉ μ μ΄λ ΅κ² λ§λλ with λ¬Έμ κΈμ§.
μ¬μ© μμ)
μ μμ μ λ λλ ν¨μ λͺΈμ²΄μ μ λμ 'usestrict';
λ₯Ό μΆκ°
"use strict";
function foo() {
x = 10; // ReferenceError: x is not defined
}
foo();
function foo() {
"use strict";
x = 10; // ReferenceError: x is not defined
}
foo();
-
ES6 λͺ¨λμ Strict Mode κΈ°λ³ΈμΌλ‘ μ μ© λμ΄μμ
-
μ½λμλν°μ ESLintλ₯Ό μ€μΉν΄λ κ°μ ν¨κ³Όλ₯Ό λ³Ό μ μμ
μ μμ Strict Mode μ μ©μ νΌνμ
1. μΈλΆ λΌμ΄λΈλ¬λ¦¬μμ μΆ©λ κ°λ₯μ±
μ μμ Strict Modeλ₯Ό μ μ©νλ©΄, λΌμ΄λΈλ¬λ¦¬λ νλ¬κ·ΈμΈ μ½λμλ κ°μ λ‘ Strict Modeκ° μ μ©λλ€. μΌλΆ μΈλΆ λΌμ΄λΈλ¬λ¦¬λ μ€λλ μ½λλ Strict Modeλ₯Ό κ³ λ €νμ§ μκ³ μμ±λμκΈ° λλ¬Έμ, κ°μμ€λ½κ² λμνμ§ μκ±°λ μ€λ₯λ₯Ό λ°μμν¬ μ μλ€.
2. μ μ Strict Mode μ μ©μ΄ μ½λ λΆλ¦¬μ λ 립μ±μ ν΄μΉ¨
Strict Modeλ₯Ό μ μμ μ μ©νλ©΄, νλ‘μ νΈμ λͺ¨λ μ½λκ° κ°μ 컨ν μ€νΈμμ μ€νλλ€. μ΄λ λͺ¨λνμ μ½λμ λ 립μ±μ ν΄μΉκ³ , νΉμ νμΌμμ μλνμ§ μμ μλ¬κ° λ°μν κ°λ₯μ±μ λμΈλ€.
ν¨μ λ¨μλ‘ strict modeλ₯Ό μ μ©νλ κ²λ νΌνμ (?)
μμμ μ€μ»· μ μμ μ°μ§λ§λΌ ν΄λκ³ ν¨μλ¨μλ‘λ μ°μ§λ§λμ μ?νλλ° μΌκ΄λκ² μ μ©νκ³ μΆμ κ²½μ°μ μ¦μμ€νν¨μλ₯Ό μ΄μ©ν μ μλ€κ³ ν©λλ€
function strictFunction() {
"use strict";
let x = 10; // Strict Mode μ μ©
}
function nonStrictFunction() {
y = 20; // Strict Mode λ―Έμ μ©
}
νμΌ μ 체μμ Strict Modeλ₯Ό μΌκ΄λκ² μ μ©νμ§ λͺ»ν΄, μ½λ κ°λ μ±κ³Ό μ μ§λ³΄μμ±μ΄ λ¨μ΄μ§ μ μμ.
κ·Έλμλ! μ¦μ μ€ν ν¨μλ‘ μ 체 μ€ν¬λ¦½νΈμ μ μ© κ°λ₯
(function () {
"use strict";
function strictFunction() {
let x = 10; // Strict Mode μ μ©
}
function nonStrictFunction() {
y = 20; // ReferenceError: y is not defined
}
})();
νμΌ λ΄ λͺ¨λ μ½λκ° λμΌν κ·μΉ(Strict Mode) μλμμ μ€νλλ―λ‘, μΌκ΄μ±κ³Ό μμ μ±μ΄ 보μ₯λ¨.
strict modeκ° λ°μμν€λ μλ¬
-
μ묡μ μ μ
(function () { "use strict"; x = 10; console.log(x); // ReferenceError: x is not defined })();
-
delete μ°μ°μλ‘ λ³μ,ν¨μ, 맀κ°λ³μλ₯Ό μμ
(function () { "use strict"; var x = 1; delete x; // SyntaxError: Delete of an unqualified identifier in strict mode. function foo(a) { delete a; // SyntaxError: Delete of an unqualified identifier in strict mode. } delete foo; // SyntaxError: Delete of an unqualified identifier in strict mode. })();
-
맀κ°λ³μ μ΄λ¦μ μ€λ³΅
(function () { "use strict"; //SyntaxError: Duplicate parameter name not allowed in this context function foo(x, x) { return x + x; } console.log(foo(1, 2)); })();
-
with λ¬Έμ μ¬μ©
with λ¬Έμ μ λ¬λ κ°μ²΄λ₯Ό μ€μ½ν 체μΈμ μΆκ°νλ€. with λ¬Έμ λμΌν κ°μ²΄μ νλ‘νΌν°λ₯Ό λ°λ³΅ν΄μ μ¬μ©ν λ κ°μ²΄ μ΄λ¦μ μλ΅ν μ μμ΄μ μ½λκ° κ°λ¨ν΄μ§λ ν¨κ³Όκ° μμ§λ§ μ±λ₯κ³Ό κ°λ μ±μ΄ λλΉ μ§λ λ¬Έμ κ° μλ€.
(function (){ 'use strict'; // SyntaxError: Strict mode code may not include a with statement with { x: 1 }) { console.log(x); ο½ }());
strict mode μ μ©μ μν λ³ν
-
μΌλ°ν¨μμ this strict modeμμ ν¨μλ₯Ό μΌλ° ν¨μλ‘μ νΈμΆνλ©΄
this
μundefined
κ° λ°μΈλ© λλ€. μμ±μν¨μκ° μλ μΌλ° ν¨μ λ΄λΆμμλ thisλ₯Ό μ¬μ©ν νμκ° μκΈ° λλ¬Έ. -
arguments κ°μ²΄
strict modeμμλ 맀κ°λ³μμ μ λ¬λ μΈμλ₯Ό μ¬ν λΉνμ¬ λ³κ²½ν΄λ arguments κ°μ²΄μ λ°μλμ§ μλλ€.
(function (a) { "use strict"; // 맀κ°λ³μμ μ λ¬λ μΈμλ₯Ό μ¬ν λΉνμ¬ λ³κ²½ a = 2; // λ³κ²½λ μΈμκ° arguments κ°μ²΄μ λ°μλμ§ μλλ€. console.log(arguments); // { 0: 1, length: 1 } })(1);